Assert தொகுதி என்றால் என்ன?
Assert தொகுதி உங்கள் குறியீட்டில் உள்ள மாறாதவைகளை சரிபார்க்க எளிய ஆனால் சக்திவாய்ந்த assertion சோதனைகளின் தொகுப்பை வழங்குகிறது.
இது ஒரு core Node.js தொகுதியாகும், இதற்கு நிறுவல் தேவையில்லை.
முக்கிய அம்சங்கள்:
எளிய truthy/falsy assertions
உண்மை/பொய் மதிப்புகளை சரிபார்த்தல்
கண்டிப்பான மற்றும் தளர்வான சமத்துவ சோதனைகள்
வெவ்வேறு வகையான சமத்துவ சரிபார்ப்புகள்
ஆழமான பொருள் ஒப்பீடு
பொருள்கள் மற்றும் வரிசைகளின் உள்ளடக்க ஒப்பீடு
பிழை எறிதல் மற்றும் கையாளுதல்
பிழைகளை சரிபார்க்கும் சோதனைகள்
async/await முறைகளுக்கான ஆதரவு
அсин்க்ரோனஸ் குறியீட்டை சோதிக்கும் திறன்
குறிப்பு:
Jest அல்லது Mocha போன்ற சோதனை கட்டமைப்புகளைப் போல அம்ச-பணக்காரமாக இல்லை என்றாலும், Assert தொகுதி இலகுவானது மற்றும் எளிய சோதனை தேவைகளுக்கு அல்லது நீங்கள் வெளிப்புற சார்புகளைத் தவிர்க்க விரும்பும் போது சரியானது.
Assert உடன் தொடங்குதல்
ஒரு எளிய செயல்பாட்டை சோதிக்க Assert தொகுதியைப் பயன்படுத்துவதற்கான விரைவான எடுத்துக்காட்டு இங்கே:
அடிப்படை Assertion எடுத்துக்காட்டு
const assert = require('assert').strict;
// Function to test
function add(a, b) {
if (typeof a !== 'number' || typeof b !== 'number') {
throw new TypeError('Inputs must be numbers');
}
return a + b;
}
// Test cases
assert.strictEqual(add(2, 3), 5, '2 + 3 should equal 5');
// Test error case
assert.throws(
() => add('2', 3),
TypeError,
'Should throw TypeError for non-number input'
);
console.log('All tests passed!');
இறக்குமதி செய்தல் மற்றும் அமைப்பு
உங்கள் Node.js பயன்பாட்டில் Assert தொகுதியை இறக்குமதி செய்து பயன்படுத்த பல வழிகள் உள்ளன:
CommonJS இறக்குமதி (Node.js)
// Basic require
const assert = require('assert');
// Using strict mode (recommended)
const assert = require('assert').strict;
// Destructuring specific methods
const { strictEqual, deepStrictEqual, throws } = require('assert');
// For async/await tests
const { rejects, doesNotReject } = require('assert').strict;
ES Modules (Node.js 12+)
// Using default import
import assert from 'assert';
// Using strict mode with ESM
import { strict as assert } from 'assert';
// Importing specific methods
import { strictEqual, deepStrictEqual } from 'assert';
// Dynamic import
const { strict: assert } = await import('assert');
சிறந்த நடைமுறை:
கண்டிப்பான முறை பரிந்துரைக்கப்படுகிறது, ஏனெனில் இது மிகவும் துல்லியமான ஒப்பீடுகள் மற்றும் சிறந்த பிழை செய்திகளை வழங்குகிறது.
இது கண்டிப்பான முறை இயல்புநிலையாக இருக்கும் Node.js இன் எதிர்கால பதிப்புகளுடன் இணக்கமாக உள்ளது.
முக்கிய Assertion முறைகள்
Assert தொகுதி உங்கள் குறியீட்டில் உள்ள மதிப்புகளைப் பற்றி assertions செய்வதற்கு பல முறைகளை வழங்குகிறது.
இந்த முறைகள் Assert தொகுதியுடன் சோதனையின் அடித்தளத்தை உருவாக்குகின்றன.
assert(value[, message])
ஒரு மதிப்பு truthy என்பதை சோதிக்கிறது. மதிப்பு falsy எனில், ஒரு AssertionError எறியப்படும்.
const assert = require('assert');
// This will pass
assert(true);
assert(1);
assert('string');
assert({});
try {
// This will throw an AssertionError
assert(false, 'This value is not truthy');
} catch (err) {
console.error(`Error: ${err.message}`);
}
try {
// These will also throw errors
assert(0);
assert('');
assert(null);
assert(undefined);
} catch (err) {
console.error(`Error: ${err.message}`);
}
assert.ok(value[, message])
இது assert()க்கான ஒரு alias ஆகும்.
const assert = require('assert');
// These assertions are equivalent
assert.ok(true, 'This value is truthy');
assert(true, 'This value is truthy');
மதிப்பு ஒப்பீடு
Assert தொகுதி மதிப்புகளை ஒப்பிட பல வழிகளை வழங்குகிறது, ஒவ்வொன்றும் வகை கட்டாயப்படுத்துதல் மற்றும் பொருள் ஒப்பீடு தொடர்பாக வெவ்வேறு நடத்தைகளைக் கொண்டுள்ளன.
assert.equal(actual, expected[, message])
சமத்துவ ஆபரேட்டரை (==) பயன்படுத்தி உண்மையான மற்றும் எதிர்பார்க்கப்பட்ட அளவுருக்களுக்கு இடையே தளர்வான, கட்டாயப்படுத்தும் சமத்துவத்தை சோதிக்கிறது.
const assert = require('assert');
// These will pass (coercive equality)
assert.equal(1, 1);
assert.equal('1', 1); // String is coerced to number
assert.equal(true, 1); // Boolean is coerced to number
try {
// This will throw an error
assert.equal(1, 2, '1 is not equal to 2');
} catch (err) {
console.error(`Error: ${err.message}`);
}
assert.strictEqual(actual, expected[, message])
கண்டிப்பான சமத்துவ ஆபரேட்டரை (===) பயன்படுத்தி உண்மையான மற்றும் எதிர்பார்க்கப்பட்ட அளவுருக்களுக்கு இடையே கண்டிப்பான சமத்துவத்தை சோதிக்கிறது.
const assert = require('assert');
// This will pass
assert.strictEqual(1, 1);
try {
// These will throw errors (strict equality)
assert.strictEqual('1', 1, 'String "1" is not strictly equal to number 1');
assert.strictEqual(true, 1, 'true is not strictly equal to 1');
} catch (err) {
console.error(`Error: ${err.message}`);
}
சிறந்த நடைமுறை:
எதிர்பாராத வகை கட்டாயப்படுத்தல் சிக்கல்களைத் தவிர்க்க strictEqual() ஐ equal() க்கு மாற்ற பரிந்துரைக்கப்படுகிறது.
பொருள் மற்றும் வரிசை ஒப்பீடு
பொருள்கள் மற்றும் வரிசைகளுடன் பணிபுரியும் போது, அவற்றின் குறிப்புகளை மட்டும் ஒப்பிடுவதற்குப் பதிலாக அவற்றின் உள்ளடக்கங்களை ஒப்பிட ஆழமான சமத்துவ சோதனைகளைப் பயன்படுத்த வேண்டும்.
பொருள்கள் மற்றும் வரிசைகளை ஒப்பிட, Node.js ஆழமான சமத்துவ செயல்பாடுகளை வழங்குகிறது:
assert.deepEqual(actual, expected[, message])
தளர்வான சமத்துவத்துடன் (==) உண்மையான மற்றும் எதிர்பார்க்கப்பட்ட அளவுருக்களுக்கு இடையே ஆழமான சமத்துவத்தை சோதிக்கிறது.
assert.deepStrictEqual(actual, expected[, message])
கண்டிப்பான சமத்துவத்துடன் (===) உண்மையான மற்றும் எதிர்பார்க்கப்பட்ட அளவுருக்களுக்கு இடையே ஆழமான சமத்துவத்தை சோதிக்கிறது.
const assert = require('assert');
// Objects with the same structure
const obj1 = { a: 1, b: { c: 2 } };
const obj2 = { a: 1, b: { c: 2 } };
const obj3 = { a: '1', b: { c: '2' } };
// These will pass
assert.deepEqual(obj1, obj2);
assert.deepStrictEqual(obj1, obj2);
// This will pass (loose equality)
assert.deepEqual(obj1, obj3);
try {
// This will throw an error (strict equality)
assert.deepStrictEqual(obj1, obj3, 'Objects are not strictly deep-equal');
} catch (err) {
console.error(`Error: ${err.message}`);
}
// Arrays
const arr1 = [1, 2, [3, 4]];
const arr2 = [1, 2, [3, 4]];
const arr3 = ['1', '2', ['3', '4']];
// These will pass
assert.deepEqual(arr1, arr2);
assert.deepStrictEqual(arr1, arr2);
// This will pass (loose equality)
assert.deepEqual(arr1, arr3);
try {
// This will throw an error (strict equality)
assert.deepStrictEqual(arr1, arr3, 'Arrays are not strictly deep-equal');
} catch (err) {
console.error(`Error: ${err.message}`);
}
சமமின்மை மற்றும் மறுப்பு
சமத்துவத்தை சரிபார்ப்பது போலவே, மதிப்புகள் சமமாக இருக்கக்கூடாது போன்ற சமயங்களில் அவை சமமாக இல்லை என்பதைச் சரிபார்ப்பதும் முக்கியமானது.
assert.notEqual(actual, expected[, message])
சமமின்மை ஆபரேட்டரை (!=) பயன்படுத்தி தளர்வான, கட்டாயப்படுத்தும் சமமின்மையை சோதிக்கிறது.
assert.notStrictEqual(actual, expected[, message])
கண்டிப்பான சமமின்மை ஆபரேட்டரை (!==) பயன்படுத்தி கண்டிப்பான சமமின்மையை சோதிக்கிறது.
const assert = require('assert');
// These will pass
assert.notEqual(1, 2);
assert.notStrictEqual('1', 1);
try {
// This will throw an error
assert.notEqual(1, '1', '1 is coercively equal to "1"');
} catch (err) {
console.error(`Error: ${err.message}`);
}
try {
// This will throw an error
assert.notStrictEqual(1, 1, '1 is strictly equal to 1');
} catch (err) {
console.error(`Error: ${err.message}`);
}
ஆழமான சமமின்மை
assert.notDeepEqual(actual, expected[, message])
தளர்வான சமமின்மையுடன் ஆழமான சமமின்மையை சோதிக்கிறது.
assert.notDeepStrictEqual(actual, expected[, message])
கண்டிப்பான சமமின்மையுடன் ஆழமான சமமின்மையை சோதிக்கிறது.
const assert = require('assert');
const obj1 = { a: 1, b: 2 };
const obj2 = { a: 1, b: 3 };
const obj3 = { a: '1', b: '2' };
// These will pass
assert.notDeepEqual(obj1, obj2);
assert.notDeepStrictEqual(obj1, obj2);
assert.notDeepStrictEqual(obj1, obj3);
try {
// This will throw an error (loose equality)
assert.notDeepEqual(obj1, obj3, 'obj1 is loosely deep-equal to obj3');
} catch (err) {
console.error(`Error: ${err.message}`);
}
பிழை கையாளுதல்
உங்கள் குறியீடு எதிர்பார்க்கப்பட்ட பிழைகளை எறிகிறதா என்பதை சோதிப்பது வலுவான பயன்பாடுகளை எழுதுவதின் முக்கியமான பகுதியாகும்.
Assert தொகுதி இந்த நோக்கத்திற்காக பல முறைகளை வழங்குகிறது.
assert.throws(fn[, error][, message])
fn செயல்பாடு ஒரு பிழையை எறியும் என்று எதிர்பார்க்கிறது. இல்லையெனில், ஒரு AssertionError எறியப்படும்.
const assert = require('assert');
// Function that throws an error
function throwingFunction() {
throw new Error('Error thrown');
}
// This will pass
assert.throws(throwingFunction);
// Check for a specific error message
assert.throws(
throwingFunction,
/Error thrown/,
'Unexpected error message'
);
// Check for a specific error type
assert.throws(
throwingFunction,
Error,
'Wrong error type'
);
// Check with a validation function
assert.throws(
throwingFunction,
function(err) {
return err instanceof Error && /thrown/.test(err.message);
},
'Error validation failed'
);
try {
// This will throw an AssertionError
assert.throws(() => {
// This function doesn't throw
return 'no error';
}, 'Expected function to throw');
} catch (err) {
console.error(`Error: ${err.message}`);
}
assert.doesNotThrow(fn[, error][, message])
fn செயல்பாடு ஒரு பிழையை எறியாது என்று எதிர்பார்க்கிறது. அது எறிந்தால், பிழை பரப்பப்படும்.
const assert = require('assert');
// This will pass
assert.doesNotThrow(() => {
return 'no error';
});
try {
// This will throw the original error
assert.doesNotThrow(() => {
throw new Error('This will be thrown');
}, 'Unexpected error');
} catch (err) {
console.error(`Error: ${err.message}`);
}
அசின்க்ரோனஸ் குறியீட்டை சோதித்தல்
நவீன JavaScript Promise-அடிப்படையிலான மற்றும் callback-அடிப்படையிலான அசின்க்ரோனஸ் குறியீட்டை கனத்த முறையில் பயன்படுத்துகிறது.
Assert தொகுதி இரண்டையும் சோதிப்பதற்கான பயன்பாடுகளை வழங்குகிறது.
assert.rejects(asyncFn[, error][, message])
asyncFn promise அல்லது async செயல்பாட்டை await செய்கிறது மற்றும் அது reject செய்யும் என்று எதிர்பார்க்கிறது.
const assert = require('assert');
async function asyncTest() {
// Function that returns a rejecting promise
function failingAsyncFunction() {
return Promise.reject(new Error('Async error'));
}
// This will pass
await assert.rejects(
failingAsyncFunction(),
/Async error/
);
// This will also pass
await assert.rejects(
async () => {
throw new Error('Async function error');
},
{
name: 'Error',
message: 'Async function error'
}
);
try {
// This will throw an AssertionError
await assert.rejects(
Promise.resolve('success'),
'Expected promise to reject'
);
} catch (err) {
console.error(`Error: ${err.message}`);
}
}
// Run the async test
asyncTest().catch(err => console.error(`Unhandled error: ${err.message}`));
assert.doesNotReject(asyncFn[, error][, message])
asyncFn promise அல்லது async செயல்பாட்டை await செய்கிறது மற்றும் அது fulfill செய்யும் என்று எதிர்பார்க்கிறது.
const assert = require('assert');
async function asyncTest() {
// This will pass
await assert.doesNotReject(
Promise.resolve('success')
);
// This will also pass
await assert.doesNotReject(
async () => {
return 'async function success';
}
);
try {
// This will throw the original rejection reason
await assert.doesNotReject(
Promise.reject(new Error('Failure')),
'Expected promise to fulfill'
);
} catch (err) {
console.error(`Error: ${err.message}`);
}
}
// Run the async test
asyncTest().catch(err => console.error(`Unhandled error: ${err.message}`));
பிற Assertion முறைகள்
assert.match(string, regexp[, message])
string உள்ளீடு வழக்கமான வெளிப்பாட்டுடன் பொருந்தும் என்று எதிர்பார்க்கிறது.
const assert = require('assert');
// This will pass
assert.match('I love Node.js', /Node\.js/);
try {
// This will throw an AssertionError
assert.match('Hello World', /Node\.js/, 'String does not match the pattern');
} catch (err) {
console.error(`Error: ${err.message}`);
}
assert.fail([message])
வழங்கப்பட்ட செய்தி அல்லது இயல்புநிலை செய்தியுடன் ஒரு AssertionError ஐ எறிகிறது.
const assert = require('assert');
try {
// This always throws an AssertionError
assert.fail('This test always fails');
} catch (err) {
console.error(`Error: ${err.message}`);
}
கண்டிப்பான முறை
Node.js அனைத்து ஒப்பீடுகளுக்கும் கண்டிப்பான சமத்துவத்தைப் பயன்படுத்தும் assertions க்கான ஒரு கண்டிப்பான முறையை வழங்குகிறது.
மிகவும் கணிக்கக்கூடிய முடிவுகளுக்கு கண்டிப்பான முறையைப் பயன்படுத்த பரிந்துரைக்கப்படுகிறது.
// Import the strict version of assert
const assert = require('assert').strict;
// These are equivalent
assert.strictEqual(1, 1);
assert.equal(1, 1); // In strict mode, this is the same as strictEqual
// These are equivalent
assert.deepStrictEqual({ a: 1 }, { a: 1 });
assert.deepEqual({ a: 1 }, { a: 1 }); // In strict mode, this is the same as deepStrictEqual
try {
// This will throw an error in strict mode
assert.equal('1', 1);
} catch (err) {
console.error(`Error: ${err.message}`);
}
Node.js Assert vs சோதனை கட்டமைப்புகளை எப்போது பயன்படுத்த வேண்டும்
Node.js Assert பயன்படுத்த வேண்டிய போது:
- எளிய ஸ்கிரிப்டுகள் அல்லது சிறிய பயன்பாடுகளை எழுதுதல்
- வளர்ச்சியின் போது விரைவான சோதனைகளை உருவாக்குதல்
- வெளிப்புற சார்புகளைத் தவிர்க்க விரும்புதல்
- உள் Node.js தொகுதிகளை உருவாக்குதல்
சோதனை கட்டமைப்பை பயன்படுத்த வேண்டிய போது (Jest, Mocha, முதலியன):
- பெரிய திட்டங்களில் பணிபுரிதல்
- சோதனை இயக்கிகள், அறிக்கையாளர்கள் மற்றும் மாக்கிங் போன்ற அம்சங்கள் தேவைப்படும் போது
- விரிவான சோதனை உள்ளடக்கம் தேவைப்படும் பயன்பாடுகளை உருவாக்குதல்
- சிறந்த பிழை அறிக்கை மற்றும் சோதனை அமைப்பு தேவைப்படும் போது
குறிப்பு:
தீவிரமான பயன்பாட்டு சோதனைக்கு, Node.js v18 இல் அறிமுகப்படுத்தப்பட்ட உள்ளமைக்கப்பட்ட Node.js Test Runner ஐப் பயன்படுத்தக் கருதுங்கள் அல்லது Jest, Mocha, அல்லது AVA போன்ற ஒரு அர்ப்பணிக்கப்பட்ட சோதனை கட்டமைப்பைப் பயன்படுத்துங்கள்.
சுருக்கம்
Node.js Assert தொகுதி உங்கள் குறியீட்டில் உள்ள மாறாதவைகளை சரிபார்க்க ஒரு எளிய ஆனால் சக்திவாய்ந்த கருவிகளை வழங்குகிறது:
Truthy/Falsy சோதனைகள்
assert() மற்றும் assert.ok()
சமத்துவ ஒப்பீடுகள்
equal(), strictEqual(), notEqual(), notStrictEqual()
ஆழமான ஒப்பீடுகள்
deepEqual(), deepStrictEqual(), notDeepEqual(), notDeepStrictEqual()
பிழை சோதனைகள்
throws(), doesNotThrow(), rejects(), doesNotReject()
பிற பயனுள்ள முறைகள்
match(), fail()
கண்டிப்பான முறை
மிகவும் கணிக்கக்கூடிய ஒப்பீடுகளுக்கு
இந்த கருவிகளைப் புரிந்துகொண்டு சரியாகப் பயன்படுத்துவதன் மூலம், நீங்கள் வலுவான குறியீட்டை எழுதலாம், பிழைகளை விரைவாகக் கண்டறியலாம் மற்றும் உங்கள் பயன்பாடுகளின் நம்பகத்தன்மையை உறுதி செய்யலாம்.